<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // Promise是一个状态机 它是一次性的!!!
    // Promise构造函数的第一个参数是一个执行器函数
    // 执行器函数是会被同步执行的;其返回值会被忽略
    /*
        执行器函数执行逻辑 会对返回的promise产生影响
            如果执行器在执行过程中发生异常
                则返回的promise会变为失败状态 持有的值是失败的原因
            如果执行器在执行过程中没有异常 且执行器的两个参数也没有调用
                则返回的promise为初始化状态 持有的值是undefined
            如果执行器在执行过程中 调用了其第一个参数
                则返回的promise会变为成功状态 持有的值是第一个参数的实参
            如果执行器在执行过程中 调用了其第二参数
                则返回的promise会变为失败状态 持有的值是第二个参数的实参
    */
    //执行器中一般要抒写异步逻辑 在异步逻辑中去确定返回的promise状态
    const promise = new Promise((resolve, reject)=>{
        setTimeout((flag)=>{
            if(flag){
                resolve("第一次请求成功")
            }else{
                reject("第一次请求失败")
            }
        },1000,true)
    })


    /*
        then返回的promise状态 由 then的两个参数中任意一个参数(回调函数)的执行过程确定
            如果then中的回调函数返回一个值，
                那么then返回的Promise将会成为成功状态，持有的值就是返回的那个值
            如果then中的回调函数返回的是一个Promise，
                那么then返回的Promise的状态 和 持有的值和该Promise保持一致
            如果then中的回调函数抛出一个错误，
                那么then返回的Promise将会成为拒绝状态，持有的值就是错误原因
    */
    promise.then(()=>{
        console.log(1)
    }).then(()=>{
        console.log(2)
    })
</script>
</html>